<?php
/**
* Class Usuario.
*
* Implementation of the class Usuario.
*
* PHP version >= 5.1
*
* @category     FrameworkPunkuPHP
* @package      Model
* @author       Luis Fernando Almendras Aruzamen
* @copyright    2010 Luis Fernando Almendras Aruzamen
* @license      http://creativecommons.org/licenses/by/3.0/legalcode  Creative Commons License Attribution 3.0 Unported
* @version      1.0
* @link         None
* @see          None
* @since        Available from the version  0.1 01-01-2010
* @deprecated   No
*/

/**
* Class Usuario
*
* Implementation of class Usuario.
*
* @category   WindowSI
* @package    Model
* @author     Luis Fernando Almendras Aruzamen
* @copyright  2010 Luis Fernando Almendras Aruzamen
* @license    http://creativecommons.org/licenses/by/3.0/legalcode  Creative Commons License Attribution 3.0 Unported
* @version    1.0
* @link       None
* @see        None
* @since      Available from the version  0.1 01-01-2010
* @deprecated No
*/
    class Usuario {
     // {{{ Constants

    /**
     * Constant for represent all registers.
     *
     * @access private
     */
     const ALL = -1;
     const VALUE = 1;
     const NONE = 0;
     // Operations
     const INSERT = "INSERT TABLE USER";
     const UPDATE = "UPDATE TABLE USER";
     const DELETE = "DELETE TABLE USER";
     const SELECT = "SELECT TABLE USER";

     const ROLE_ADMINISTRATOR_DEFAULT = "Administrador"; // Rol Administrator
     const ROLE_ROOT_DEFAULT = "SuperUsuario"; // Rol Super Usuario
     const ROLE_OPERATOR_DEFAULT = "Operador"; // Rol Reportes

    // }}}

    // {{{ atributos

    /**
     * Variable instance Data Base.
     *
     * @var DataBase
     * @access private
     */
        private  $instanceDataBase;
    // }}}

    // {{{ constructores

    /**
     * This is construct base of the class.
     *
     * A public constructor; initializes the variable $instanceDataBase.
     *
     */
        public function __construct( $instanceDataBase ) {
            $this->instanceDataBase = $instanceDataBase;
        }
    // }}}

    // {{{ metodos

/**
     * The implementation method for query to the instance data Base.
     *
     * @throws None.
     *
     * @access     public
     * @static     No.
     * @see        None.
     * @since      Available from the version  1.0 01-01-2010.
     * @deprecated No.
     */
        public function getLoginUsuario($user, $password, $role= self::ROLE_OPERATOR_DEFAULT ){
            $result = false;
            $query = null;
            $resAux = null;
            try{
                if($role != self::ROLE_ROOT_DEFAULT){
                $query = "select count(1) login ".
                         "from seg_usuario a, seg_rol b, seg_usuario_rol c ".
                         "where a.estado_registro = 'A' ".
                         "and a.usuario = ? ".
                         "and a.llave = password(?) ".
                         "and b.estado_registro = 'A' ".
                         "and c.estado_registro = 'A' ".
                         "and c.fk_id_usuario = a.pk_id_usuario ".
                         "and c.fk_id_rol = b.pk_id_rol ";//."and b.rol = ?";
                }
                else{
                $query = "select count(1) login ".
                         "from seg_usuario a ".
                         "where a.estado_registro = 'A' ".
                         "and a.usuario = ? ".
                         "and a.llave = password(?) ";
                
                }

                $resultAux = DataBase::getArrayListQuery($query, array($user, $password), $this->instanceDataBase);
                $aux = $resultAux[0];
                $result = $aux["login"]==1 ? true : false;
            }
            catch(PDOException $e){
                echo 'Error JF-Model-0141: '.$e->getMessage();
            }
            return $result;
        }

        /**
     * The implementation method for query to the instance data Base.
     *
     * @throws None.
     *
     * @access     public
     * @static     No.
     * @see        None.
     * @since      Available from the version  1.0 01-01-2010.
     * @deprecated No.
     */
        public function getIdUsuario($user, $password, $role= self::ROLE_OPERATOR_DEFAULT ){
            $result = -1;
            $query = null;
            $resAux = null;
            try{
                if( $role != self::ROLE_ROOT_DEFAULT ){
                $query = "select a.pk_id_usuario ".
                         "from seg_usuario a, seg_rol b, seg_usuario_rol c ".
                         "where a.estado_registro = 'A' ".
                         "and a.usuario = ? ".
                         "and a.llave = password(?) ".
                         "and b.estado_registro = 'A' ".
                         "and c.estado_registro = 'A' ".
                         "and c.fk_id_usuario = a.pk_id_usuario ".
                         "and c.fk_id_rol = b.pk_id_rol ";//. "and b.rol = ?";
                $resultAux = DataBase::getArrayListQuery($query, array($user, $password), $this->instanceDataBase);
                }
                else{
                $query = "select a.pk_id_usuario ".
                         "from seg_usuario a ".
                         "where a.estado_registro = 'A' ".
                         "and a.usuario = ? ".
                         "and a.llave = password(?) ";
                $resultAux = DataBase::getArrayListQuery($query, array($user, $password), $this->instanceDataBase);
                }
                
                $aux = $resultAux[0];
                $result = $aux["pk_id_usuario"];
            }
            catch(PDOException $e){
                echo 'Error JF-Model-0181: '.$e->getMessage();
                $result = -1;
            }
            return $result;
        }

    /**
     * The implementation method for query to the instance data Base.
     *
     * @throws None.
     *
     * @access     public
     * @static     No.
     * @see        None.
     * @since      Available from the version  1.0 01-01-2010.
     * @deprecated No.
     */
        public function getListUsuario($idUsuario = self::ALL){
            $result = null;
            $query = null;
            try{
                $query = "SELECT a.pk_id_usuario, a.usuario, a.llave, a.cnf_base, a.estado, a.transaccion_creacion, a.transaccion_modificacion, a.fecha_transaccion, ".
                        "a.fk_id_empleado, b.nombres, b.apellido_paterno, b.apellido_materno, b.carnet_identidad, b.ciudad_ci_expedido, c.fk_id_rol, d.rol, c.pk_id_usuario_rol ".
                        "FROM seg_usuario a, rrhh_empleado b, seg_usuario_rol c, seg_rol d ".
                        "WHERE a.estado_registro = 'A'  ".
                        "and b.estado_registro = 'A' ".
                        "and a.fk_id_empleado = b.pk_id_empleado ".
                        "and c.estado_registro = 'A' ".
                        "and c.fk_id_usuario = a.pk_id_usuario ".
                        "and d.estado_registro = 'A' ".
                        "and c.fk_id_rol = d.pk_id_rol";

                if( $idUsuario != self::ALL){
                $query = $query." AND a.pk_id_usuario = ?";
                $result = DataBase::getArrayListQuery($query, array($idUsuario), $this->instanceDataBase);
                }
                else{
                $result = DataBase::getArrayListQuery($query,array(), $this->instanceDataBase);
                }
            }
            catch(PDOException $e){
                echo 'Error JF-Model-0071: '.$e->getMessage();
            }
            return $result;
        }

    /**
     * The implementation method for insert data to the instance data Base.
     *
     * @throws None.
     *
     * @access     public
     * @static     No.
     * @see        None.
     * @since      Available from the version  1.0 01-01-2010.
     * @deprecated No.
     */
        public function insertUsuario($dataUsuario, $dataRol){
            $resultUsuario = null;
            $resultRolUsuario = null;
            $queryUsuario = null;
            $queryRolUsuario = null;
            $query = null;
            $resultAux = null;
            $aux = null;
            try{
                DataBase::getBeginTransaction($this->instanceDataBase);                
                $queryUsuario = "INSERT INTO seg_usuario ".
                            "( usuario, llave, fk_id_empleado, cnf_base, estado_registro, usuario_transaccion, transaccion_creacion, ".
                            "transaccion_modificacion, fecha_transaccion) ".
                            "VALUES ( ?, password(?), ?, 'NOBASE', 'A', ?, ?, ?, current_timestamp())";
                
                $resultUsuario = DataBase::getExecuteDmlAndGetLastInsertId($queryUsuario, $dataUsuario,$this->instanceDataBase);
                
                $queryRolUsuario = "INSERT INTO seg_usuario_rol ".
                            "(fk_id_usuario, fk_id_rol, estado_registro, usuario_transaccion, transaccion_creacion, transaccion_modificacion, fecha_transaccion) ".
                            "VALUES (".$resultUsuario." ,?, 'A', ?, ?, ?, current_timestamp())";
                
                $resultRolUsuario = DataBase::getExecuteDML($queryRolUsuario, $dataRol,$this->instanceDataBase);
                DataBase::getCommitTransaction($this->instanceDataBase);
            }
            catch(PDOException $e){
                echo 'Error JF-Model-0072: '.$e->getMessage();
            }
            return $resultRolUsuario;
        }

     /**
     * The implementation method for delete data to the instance data Base.
     *
     * @throws None.
     *
     * @access     public
     * @static     No.
     * @see        None.
     * @since      Available from the version  1.0 01-01-2010.
     * @deprecated No.
     */
        public function deleteUsuario($dataUsuario, $dataRol){
            $resultUsuario = null;
            $resultRolUsuario = null;
            $queryUsuario = null;
            $queryRolUsuario = null;
            try{
                $queryUsuario = "UPDATE seg_usuario ".
                         "SET estado_registro = 'E', ".
                         "    transaccion_modificacion = ?, fecha_transaccion = current_timestamp(), usuario_transaccion = ? ".
                         "WHERE pk_id_usuario = ? ";
                $queryRolUsuario = "UPDATE seg_usuario_rol ".
                         "SET estado_registro = 'E', ".
                         "    transaccion_modificacion = ?, fecha_transaccion = current_timestamp(), usuario_transaccion = ?  ".
                         "WHERE pk_id_usuario_rol = ?";
                DataBase::getBeginTransaction($this->instanceDataBase);
                $resultUsuario = DataBase::getExecuteDML($queryUsuario, $dataUsuario,$this->instanceDataBase);
                $queryRolUsuario = DataBase::getExecuteDML($queryRolUsuario, $dataRol,$this->instanceDataBase);
                DataBase::getCommitTransaction($this->instanceDataBase);

            }
            catch(PDOException $e){
                echo 'Error JF-Model-0073: '.$e->getMessage();
            }
            return $queryRolUsuario;
        }

     /**
     * The implementation method for update data to the instance data Base.
     *
     * @throws None.
     *
     * @access     public
     * @static     No.
     * @see        None.
     * @since      Available from the version  1.0 01-01-2010.
     * @deprecated No.
     */
        public function updateUsuario($dataUsuario, $dataRol){
            $resultUsuario = null;
            $resultRolUsuario = null;
            $queryUsuario = null;
            $queryRolUsuario = null;
            try{
                $queryUsuario = "UPDATE seg_usuario ".
                         "SET usuario = ? , llave = password(?), fk_id_empleado = ?, ".
                         "    transaccion_modificacion = ? , fecha_transaccion = current_timestamp(), usuario_transaccion = ? ".
                         "WHERE pk_id_usuario = ? ";
                $queryRolUsuario = "UPDATE seg_usuario_rol ".
                         "SET fk_id_usuario = ? , fk_id_rol = ?,  ".
                         "    transaccion_modificacion = ?, fecha_transaccion = current_timestamp(), usuario_transaccion = ? ".
                         "WHERE pk_id_usuario_rol = ? ";
                DataBase::getBeginTransaction($this->instanceDataBase);
                $resultUsuario = DataBase::getExecuteDML($queryUsuario, $dataUsuario,$this->instanceDataBase);
                $resultRolUsuario = DataBase::getExecuteDML($queryRolUsuario, $dataRol,$this->instanceDataBase);
                DataBase::getCommitTransaction($this->instanceDataBase);
            }
            catch(PDOException $e){
                echo 'Error JF-Model-0074: '.$e->getMessage();
            }
            return $resultRolUsuario;
        }
     // }}}
    }
?>
